iT邦幫忙

0

Javascript 進階 2-1 JavaScript 是如何運行的

  • 分享至 

  • xImage
  •  

直譯語言(Interpreted Language)

javascript就是直譯式語言,會直接透過直譯器,將代碼生成出來,才在運行環境執行。並且如果有錯誤的狀況會直接在運行環境作回饋。

而直譯式語言的優點就是不需要預先訂義型別,並且彈性較高

https://ithelp.ithome.com.tw/upload/images/20191001/20121770OWp0VmKYjT.png

而跟直譯式語言相對的就是,編譯式語言。

編譯式語言在送到執行環境之前,會進行一段編譯的過程,這時候如果有錯的話,就會在編譯的過程中出現錯誤回饋。

這就是編譯式語言的好處,另外同時編譯式語言大部分的效能都會稍微好一些。

https://ithelp.ithome.com.tw/upload/images/20191001/20121770Zom8FQVpDo.png

Javascript 直譯器轉換過程

  • 語法基本單元化(Tokenizing)
  • 抽象結構樹 AST(Abstract Syntax Tree)
  • 代碼生成

語法基本單元化(Tokenizing)

語法基本單元化就是將特定的變數宣告進行字串的拆解

例如

var ji = '吉';

上述的變數定義,對直議器來說並不會知道 var 是變數的宣告方式,ji 是變數名稱。

在這個步驟就是依序分解成不同的物件區塊(Token),並且給予不同的 Token 不同的識別名稱。

https://ithelp.ithome.com.tw/upload/images/20191001/20121770maQpbaaiZI.png

抽象結構樹 AST(Abstract Syntax Tree)

抽象結構樹會依照剛剛的 Token 的結果產生類似 JSON 格式的階層列表出來

https://ithelp.ithome.com.tw/upload/images/20191001/20121770PWxcmovmN5.png

可以看到kind的地方則是宣告變數的方式

並且可以發現是一個 VariableDeclaration 的動作

但到這個部分都還沒有真正運行,要到特定的環境才會運行(chrome或是Node.js)

另外可以注意的地方是,如果沒有用 var let const 這些宣告變數的宣告詞,則 AST 就不會是 VariableDeclaration。

而是 AssignmentExpression

https://ithelp.ithome.com.tw/upload/images/20191001/20121770gT3ptAuyhg.png

好~之後就是代碼生成,並且將代碼丟到運行環境進行運行嚕~!

今天的筆記就到這邊 ~! 汪汪

線上工具 Esprima : https://esprima.org/demo/parse.html#


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言